package cn.xwt.weidisk.mapper;

import cn.xwt.weidisk.pojo.dao.FileDo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author 薛慰涛
 * 操作File表
 */
public interface FileMapper {

    /**
     * 插入文件
     * @param fileDo 文件信息
     * @return int
     */
    int insertFile(FileDo fileDo);

    /**
     * 根据文件名和文件路径判断文件是否存在
     * @param fileDo 文件信息
     * @return Long 文件id
     */
    Long selectFileByNameAndPath(FileDo fileDo);

    /**
     * 根据用户id查询文件夹
     * @param uid 用户id
     * @param path 文件路径
     * @return List<FileDo>
     */
    List<FileDo> selectFolderList(@Param("uid") Long uid, @Param("path") String path);

    /**
     * 根据用户id查询文件列表
     * @param uid 用户id
    * @param path 文件路径
     * @return List<FileDo>
     */
    List<FileDo> selectFileList(@Param("uid") Long uid, @Param("path") String path);

    /**
     * 修改文件名
     * @param id 文件id
     * @param name 修改后的文件名
     * @return int
     */
    int updateName(@Param("id") Long id, @Param("name") String name);

    /**
     * 查询子文件夹下的所有文件
     * @param uid 用户id
     * @param path 文件夹路径
     * @return list<FileDo>
     */
    List<FileDo> selectSubList(@Param("uid") Long uid, @Param("path") String path);

    /**
     * 查询当前文件夹下的所有文件
     * @param uid 用户id
     * @param path 文件夹路径
     * @return list<FileDo>
     */
    List<FileDo> selectCurrentList(@Param("uid") Long uid, @Param("path") String path);


    /**
     * 修改文件路径
     * @param file 要修改的文件
     * @return int
     */
    int updatePath(FileDo file);

    /**
     * 查询图片列表
     * @param uid 用户id
     * @param type 类型
     * @return List<FileDo>
     */
    List<FileDo> selectListByType(@Param("uid") Long uid, @Param("type") String type);

    /**
     * 查询其它文件列表
     * @param uid 用户id
     * @return List<FileDo>
     */
    List<FileDo> selectOtherList(@Param("uid") Long uid);

    /**
     * 通过文件id查询文件
     * @param id 文件id
     * @return FileDo
     */
    FileDo selectFileById(@Param("id") Long id);

    /**
     * 保存rid
     * @param file id，rid
     */
    void updateRidById(FileDo file);

    /**
     * 清空rid
     * @param rid 回收站文件id
     */
    void updateRidByRid(@Param("rid") Long rid);

    /**
     * 根据rid查询文件
     * @param rid rid
     * @param uid 用户id
     * @return List<FileDo>
     */
    List<FileDo> selectFileListByRid(@Param("rid") Long rid, @Param("uid") Long uid);

    /**
     * 通过rid删除文件记录
     * @param rid rid
     * @param uid 用户id
     */
    void deleteFileListByRid(@Param("rid") Long rid, @Param("uid") Long uid);

    /**
     * 判断key是否存在
     * @param key 要检查的key
     * @return List<Long>
     */
    List<Long> selectFileByKey(@Param("key") String key);

    /**
     * 通过id查询使用过的容量
     * @param uid 用户id
     * @return Long
     */
    Long selectUsed(@Param("uid") Long uid);
}
